大家好,鐵人賽堂堂邁入第十八天!
在過去幾天,我們深度體驗了 adk-mcp
這個功能全面、整合度高的「應用開發套件」。今天,我們將換上另一套裝備fast-mcp
框架。
fast-mcp
的設計理念更接近現代的 Python Web 框架 (如 FastAPI),它輕量、快速,並給予開發者更多的控制權。今天,我們就來從零開始,用 fast-mcp
搭建一個最經典的 "Hello, World!" 級別的 MCP 應用。
fast-mcp
開發環境我們同樣從一個乾淨的虛擬環境開始。
打開終端機,進入你的專案資料夾,並執行:
python -m venv venv
source ./venv/bin/activate
fast-mcp
fast-mcp
官方推薦使用 uv
這個 Rust 編寫的高速 Python 套件管理器來安裝,速度飛快。
# 先安裝 uv
pip install uv
# 再用 uv 來安裝 fastmcp
uv pip install fastmcp
小提示: 如果你不想額外安裝
uv
,直接使用pip install fastmcp
也是完全可以的。
安裝完成後,可以執行以下指令來確認 fast-mcp
的 CLI (命令列工具) 是否可用:
fastmcp version
如下圖:
fast-mcp
伺服器 (my_server.py
)fast-mcp
定義工具的方式非常優雅,採用了裝飾器 (Decorator) 的語法,這對於熟悉 FastAPI 或 Flask 的開發者來說會倍感親切。
建立一個名為 my_server.py
的檔案,並貼上以下程式碼:
from fastmcp import FastMCP
# 1. 初始化一個 FastMCP 應用
mcp = FastMCP("My First FastMCP Server")
# 2. 使用 @mcp.tool 裝飾器來註冊一個工具
@mcp.tool
def greet(name: str) -> str:
"""A simple tool that returns a greeting."""
return f"Hello, {name}!"
# 3. (可選) 直接執行此檔案時的啟動方式
if __name__ == "__main__":
# 但我們更推薦使用 fastmcp CLI 來啟動
mcp.run(transport="http", port=8005)
mcp = FastMCP(...)
: 建立一個 FastMCP
應用實例。@mcp.tool
: 這是 fast-mcp
的精髓!任何被這個裝飾器標記的 Python 函式,都會被自動註冊成一個可供遠端呼叫的 MCP 工具。fast-mcp
客戶端 (my_client.py
)接著,我們來編寫一個客戶端,用來呼叫剛剛建立的 greet
工具。
建立一個名為 my_client.py
的檔案,並貼上以下程式碼:
import asyncio
from fastmcp import Client
# 注意:這裡的 port 號需要與你啟動伺服器時的 port 一致
# 我們稍後會用 8000 port 來啟動伺服器,所以先設定為 8000
client = Client("http://localhost:8000/mcp")
async def call_tool(name: str):
# 使用 async with 來優雅地管理連線
async with client:
# 呼叫名為 "greet" 的工具,並傳遞參數
result = await client.call_tool("greet", {"name": name})
print(" 成功收到來自 Server 的回應:")
print(result)
# 執行非同步主程式
if __name__ == "__main__":
asyncio.run(call_tool("FastMCP"))
client = Client(...)
: 建立一個客戶端實例,指向伺服器的 /mcp
端點。async with client:
: fast-mcp
的客戶端同樣是非同步的,使用 async with
可以自動處理連線的建立與關閉。await client.call_tool(...)
: 這是客戶端的核心方法,用來執行遠端的工具。第一個參數是工具名稱,第二個參數是包含所有參數的字典。第一步:啟動伺服器
fast-mcp
的 CLI 指令來啟動我們的伺服器:fastmcp run my_server.py:mcp --transport http --port 8000
重點提示: 我們在這裡使用了
--port 8000
。這個命令列參數會覆寫你在my_server.py
中寫的port=8005
。這意味著我們的伺服器現在運行在 8000 埠口上。這也是為什麼我們在my_client.py
中將 URL 設定為8000
的原因。
第二步:執行客戶端
python my_client.py
成果驗收
如果一切順利,你將會在客戶端的終端機看到:
同時,在伺服器的終端機,你會看到一條類似以下的日誌,記錄了這次成功的請求:
恭喜你!今天我們成功地用 fast-mcp
搭建並運行了第一個 Client-Server 應用。
我們初步體驗了 fast-mcp
的設計哲學:
adk-mcp
那樣提供包含 Agent 和 Web UI 的完整應用框架。fastmcp run
等指令來管理應用,符合現代 Python 開發的習慣。我們現在對 adk-mcp
和 fast-mcp
都有了初步的認識。明天,我們將深入 fast-mcp
的進階功能,學習如何讓我們的工具執行非同步 I/O 操作,這是在真實世界中打造高效能服務的關鍵一步!